﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using AccesoData.Interfaces;
using Entidades;
using MySql.Data.MySqlClient;

namespace AccesoData.DAOMySql
{
    /// <summary>
    /// clase que se encarga de la manipulacion de la entidad personal en mysql
    /// </summary>
    class DAOPersonalMySql:ConexionBaseDatos, IDAOPersonal
    {
        /// <summary>
        /// clase que almacena la informacion del ajustador en la base de datos
        /// </summary>
        /// <param name="ajustador">datos a almacenar</param>
        /// <returns>id del personal almacenado</returns>
        public int AgregarPersonal(Personal ajustador)
        {
            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "AgregarPersonal";


                comando.Parameters.AddWithValue("@nombre", ajustador.Nombre);
                comando.Parameters.AddWithValue("@apellido", ajustador.Apellido);
                comando.Parameters.AddWithValue("@cedula", ajustador.Cedula);
                comando.Parameters.AddWithValue("@idLugar", ajustador.Lugar);
                comando.Parameters.AddWithValue("@rif", ajustador.Rif);
                comando.Parameters.AddWithValue("@letraRif", ajustador.LetraRif);
                comando.Parameters.AddWithValue("@telefono1", ajustador.Telefono);
                comando.Parameters.AddWithValue("@telefono2", ajustador.Telefono2);
                comando.Parameters.AddWithValue("@telefono3", ajustador.Telefono3);

                comando.Parameters["@nombre"].Direction = ParameterDirection.Input;
                comando.Parameters["@apellido"].Direction = ParameterDirection.Input;
                comando.Parameters["@cedula"].Direction = ParameterDirection.Input;
                comando.Parameters["@idLugar"].Direction = ParameterDirection.Input;
                comando.Parameters["@rif"].Direction = ParameterDirection.Input;
                comando.Parameters["@letraRif"].Direction = ParameterDirection.Input;
                comando.Parameters["@telefono1"].Direction = ParameterDirection.Input;
                comando.Parameters["@telefono2"].Direction = ParameterDirection.Input;
                comando.Parameters["@telefono3"].Direction = ParameterDirection.Input;

                int id = 0;
                MySqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    id = (reader[0] == DBNull.Value) ? 0 : (int)reader[0];
                }

                CerrarConexion();
                return id;

            }
            catch (Exception)
            {

                return -1;
            }
        }

        /// <summary>
        /// metodo que obtiene los datos de un ajustador dado su numero identificador
        /// </summary>
        /// <param name="idAjustador">identificador del ajustador</param>
        /// <returns>todos los datos del ajustador</returns>
        public Personal ObtenerPersonal(int idAjustador)
        {
            try
            {

                MySqlCommand comando = new MySqlCommand();
                Personal miAjustador = FabricaEntidades.ObtenerPersonal();

                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ConsultarAjustador";
                comando.Parameters.AddWithValue("@idAjustador", idAjustador);
                comando.Parameters["@idAjustador"].Direction = ParameterDirection.Input;
                MySqlDataReader reader = comando.ExecuteReader();

                while (reader.Read())
                {
                    miAjustador.Id = (int) reader[0];
                    miAjustador.Cedula = (int) reader[1];
                    miAjustador.Rif = (int) reader[2];
                    miAjustador.LetraRif = reader.GetChar(3);
                    miAjustador.Nombre = (string) reader[4];
                    miAjustador.Apellido = (string) reader[5];
                    miAjustador.Telefono = (string)reader[6];
                    miAjustador.Lugar = (int) reader[7];
                    miAjustador.Telefono2 = (string)reader[8];
                    miAjustador.Telefono3 = (string)reader[9];

                }

                reader.Close();
                CerrarConexion();
                return miAjustador;

            }
            catch (Exception)
            {

                return null;
            }
        }

        /// <summary>
        /// deshabilita todas las funciones del ajustador
        /// </summary>
        /// <param name="idAjustador"></param>
        /// <returns></returns>
        public bool DesactivarAjustador(int idAjustador)
        {
           return false;
        }

        /// <summary>
        /// metodo que eliminar un ajustador de la base de datos
        /// </summary>
        /// <param name="ajustador"></param>
        /// <returns></returns>
        public bool EliminarAjustador(int ajustador)
        {
            return false;
        }

        /// <summary>
        /// obtiene una lista de todos los ajustadores habilitados del sistema
        /// </summary>
        /// <returns></returns>
        public List<Personal> ObtenerAjustadores ()
        {
            try
            {

                List<Personal> retorno = new List<Personal>();
                MySqlCommand comando = new MySqlCommand();

                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ObtenerAjustadores";
                MySqlDataReader reader = comando.ExecuteReader();

                while (reader.Read())
                {
                    Personal miAjustador = FabricaEntidades.ObtenerPersonal();
                    miAjustador.Id = (int)reader[0];
                    miAjustador.Cedula = (int)reader[1];
                    miAjustador.Rif = (int)reader[2];
                    miAjustador.LetraRif = reader.GetChar(3);
                    miAjustador.Nombre = (string)reader[4];
                    miAjustador.Apellido = (string)reader[5];
                    miAjustador.Telefono = (string)reader[6];
                    miAjustador.Lugar = (int)reader[7];
                    miAjustador.Telefono2 = (string)reader[8];
                    miAjustador.Telefono3 = (string)reader[9];
                    
                    retorno.Add(miAjustador);
                }

                reader.Close();
                CerrarConexion();
                return retorno;

            }
            catch (Exception)
            {

                return null;
            }
        }

        /// <summary>
        /// edita los datos del ajustador en la base de datos
        /// </summary>
        /// <param name="ajustador">datos a editar</param>
        /// <returns>verdadero si lo logro editar</returns>
        public bool EditarPersonal (Personal ajustador)
        {
            try
            {

                MySqlCommand comando = new MySqlCommand();
                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "EditarPersonal";


                comando.Parameters.AddWithValue("@nombreNuevo", ajustador.Nombre);
                comando.Parameters.AddWithValue("@apellidoNuevo", ajustador.Apellido);
                comando.Parameters.AddWithValue("@cedulaNuevo", ajustador.Cedula);
                comando.Parameters.AddWithValue("@idLugar", ajustador.Lugar);
                comando.Parameters.AddWithValue("@rifNuevo", ajustador.Rif);
                comando.Parameters.AddWithValue("@letraRifNuevo", ajustador.LetraRif);
                comando.Parameters.AddWithValue("@telefono1Nuevo", ajustador.Telefono);
                comando.Parameters.AddWithValue("@telefono2Nuevo", ajustador.Telefono2);
                comando.Parameters.AddWithValue("@telefono3Nuevo", ajustador.Telefono3);
                comando.Parameters.AddWithValue("@idAjustador", ajustador.Id);

                comando.Parameters["@nombreNuevo"].Direction = ParameterDirection.Input;
                comando.Parameters["@apellidoNuevo"].Direction = ParameterDirection.Input;
                comando.Parameters["@cedulaNuevo"].Direction = ParameterDirection.Input;
                comando.Parameters["@idLugar"].Direction = ParameterDirection.Input;
                comando.Parameters["@rifNuevo"].Direction = ParameterDirection.Input;
                comando.Parameters["@letraRifNuevo"].Direction = ParameterDirection.Input;
                comando.Parameters["@telefono1Nuevo"].Direction = ParameterDirection.Input;
                comando.Parameters["@telefono2Nuevo"].Direction = ParameterDirection.Input;
                comando.Parameters["@telefono3Nuevo"].Direction = ParameterDirection.Input;
                comando.Parameters["@idAjustador"].Direction = ParameterDirection.Input;

                comando.ExecuteNonQuery();
                CerrarConexion();
                return true;

            }
            catch (Exception)
            {

                return false;
            }
        }
    }
}
